#ifndef public_cast_HPP__
#define public_cast_HPP__

template <typename T, typename T::type... P>
struct public_cast;

template <typename T>
struct public_cast<T> 
{ 
	static typename T::type value; 
};


template <typename T>
typename T::type public_cast<T>::value;


template <typename T, typename T::type P>
struct public_cast<T, P> 
{ 
	static typename T::type value; 
};

template <typename T, typename T::type P>
typename T::type public_cast<T, P>::value = public_cast<T>::value = P;

#endif // public_cast_HPP__